﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Com.queryzer2.Dao.Base;
using Com.queryzer2.Dao.Interface;
using Com.queryzer2.Domain.Entities;
using Oracle.DataAccess.Client;
using Com.queryzer2.Domain;
using System.Data;

namespace Com.queryzer2.Dao.Impl
{
    public class EsitoPraticaDao : OracleDao<OracleSessionManager, ISessionModel>, IEsitoPraticaDao
    {
        public EsitoPraticaDao(OracleSessionManager daoContext)
            : base(daoContext)
        {
            if (!base.Context.Session_isActive())
            {
                base.Context.Session_Init();
                base.CurrentConnection.Open();
            }
        }

        private string seletctAll = "select * from GEP_ESITO";
        private string selectById = "select * from GEP_ESITO WHERE TES_COD_FLUSSO=:COD_FLUSSO";
        private string delete = "delete GEP_ESITO WHERE TES_COD_FLUSSO=:COD_FLUSSO";

        private string update = "UPDATE GEP_ESITO"
                              + " SET PIVA_UTENTE = :PIVA_UTENTE, PIVA_DISTRIBUTORE = :PIVA_DISTRIBUTORE," 
                              + " COD_PRAT_UTENTE = :COD_PRAT_UTENTE, COD_PRAT_DISTRIB = :COD_PRAT_DISTRIB, VERIFICA_AMM = :VERIFICA_AMM, COD_CAUSALE = :COD_CAUSALE," 
                              + " MOTIVAZIONE = :MOTIVAZIONE, STATO_SPEDIZIONE = :STATO_SPEDIZIONE, DATA_SPEDIZIONE = :DATA_SPEDIZIONE"
                              + " WHERE (COD_FLUSSO = :COD_FLUSSO)";

        private string insert = "INSERT INTO GEP_ESITO"
                              + " (COD_FLUSSO, PIVA_UTENTE, PIVA_DISTRIBUTORE, COD_PRAT_UTENTE, COD_PRAT_DISTRIB, VERIFICA_AMM, COD_CAUSALE, MOTIVAZIONE,"
                              + " STATO_SPEDIZIONE, DATA_SPEDIZIONE)"
                              + " VALUES (:COD_FLUSSO, :PIVA_UTENTE, :PIVA_DISTRIBUTORE, :COD_PRAT_UTENTE, :COD_PRAT_DISTRIB, :VERIFICA_AMM, :COD_CAUSALE,"
                              + " :MOTIVAZIONE, :STATO_SPEDIZIONE, :DATA_SPEDIZIONE)";

        private OracleParameter[] MappingParams(GEP_ESITO r, bool isInsert)
        {
            OracleParameter[] oparams;
            oparams = new OracleParameter[10];

            oparams[0] = new OracleParameter("COD_FLUSSO", OracleDbType.Decimal, r.Cod_Flusso, ParameterDirection.Input);
            oparams[1] = new OracleParameter("PIVA_UTENTE", OracleDbType.Varchar2, r.Piva_Utente, ParameterDirection.Input);
            oparams[2] = new OracleParameter("PIVA_DISTRIBUTORE", OracleDbType.Varchar2, r.Piva_Distributore, ParameterDirection.Input);
            oparams[3] = new OracleParameter("COD_PRAT_UTENTE", OracleDbType.Varchar2, r.Cod_Prat_Utente, ParameterDirection.Input);
            oparams[4] = new OracleParameter("COD_PRAT_DISTRIB", OracleDbType.Varchar2, r.Cod_Prat_Distrib, ParameterDirection.Input);
            oparams[5] = new OracleParameter("VERIFICA_AMM", OracleDbType.Varchar2, r.Verifica_Amm, ParameterDirection.Input);
            oparams[6] = new OracleParameter("COD_CAUSALE", OracleDbType.Varchar2, r.Cod_Causale, ParameterDirection.Input);
            oparams[7] = new OracleParameter("MOTIVAZIONE", OracleDbType.Varchar2, r.Motivazione, ParameterDirection.Input);
            oparams[8] = new OracleParameter("STATO_SPEDIZIONE", OracleDbType.Varchar2, r.Stato_Spedizione, ParameterDirection.Input);
            oparams[9] = new OracleParameter("DATA_SPEDIZIONE", OracleDbType.Date, r.Data_Spedizione, ParameterDirection.Input);
            
            return oparams;
        }

        #region IDao<GEP_ESITO,decimal> Members

        public Dictionary<decimal, GEP_ESITO> GetAll()
        {
            throw new NotImplementedException();
        }

        public GEP_ESITO GetById(decimal id)
        {
            throw new NotImplementedException();
        }

        public void Insert(GEP_ESITO entity)
        {
            throw new NotImplementedException();
        }

        public void Update(GEP_ESITO entity)
        {
            throw new NotImplementedException();
        }

        public void Delete(decimal id)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region IDisposable Members

        public void Dispose()
        {
            if (!base.Context.TransactionModeOn)
            {
                base.CurrentConnection.Close();
            }
        }

        #endregion
    }
}